/*(C) Copyright

    This file is part of GastosMovil.
    
    GastosMovil is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    GastosMovil is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with GastosMovil.  If not, see <http://www.gnu.org/licenses/>.
    
    Autor: Antonio Cristóbal Álvarez Abellán -> acabellan@gmail.com
    
    */

package deeloco.android.gastos.Movil.plus;

import java.util.Calendar;
import java.util.Date;

import org.bostonandroid.datepreference.DatePreference;

import deeloco.android.gastos.Movil.plus.R.drawable;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Bitmap.Config;
import android.graphics.PorterDuff.Mode;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.graphics.drawable.shapes.RectShape;
import android.graphics.drawable.shapes.Shape;
import android.preference.PreferenceManager;
import android.provider.CallLog;
import android.text.format.DateFormat;
import android.util.Log;

/**
 * ValoresPreferencias: Retorna el valor almacenado en las preferencias de la aplicación.
     */

public class ValoresPreferencias {
	
    //private final int NUMSC=1;
	private double iva=1.18;
    private final int NUMESP1=2;
    private final int NUMESP2=3;
    private final int NUM=4;
    private static final String TAG = "ValoresPreferencias";
    
    Context contexto;
	
    /**
     * Constructor: Constructor de la clase. Se le pasa el Contexto de la preferencias que se quiere.
         */
    public ValoresPreferencias(Context c)
    {
    	contexto=c;
    }
	   //***************************************************
	// Funciones que recogen los valores de preferencias
	//***************************************************
	
    /*
     * CONTEXT_ID_CP_PROPERTY_PAGE =
     * Basic profile name/description/auto-connect property page
     */

    /**
     * Retorna el valor del mes que se ha seleccionado en ajustes.
     * @return intero = numero de mes (1-Enero)
     */
    public int getPreferenciasMes(){
    	int mesRetorno;
    	String mes= PreferenceManager.getDefaultSharedPreferences(contexto).getString("listMes", "1");
    	int retorno=Integer.parseInt(mes);
    	switch (retorno)
    	{
	    	case 0: //Listar todos los meses
	    		mesRetorno=0;
	    		break;
	    		
	    	case 1: //Listar el mes actual
	    		Calendar calendar = Calendar.getInstance();
	        	mesRetorno = calendar.get(Calendar.MONTH); //ENERO=0, DICIEMBRE=11
	        	int dia=calendar.get(Calendar.DAY_OF_MONTH);
	        	mesRetorno++;
	        	if (dia<this.getPreferenciasInicioMes())
	        	{
	        		mesRetorno--;
	        		if (mesRetorno==0) mesRetorno=12;
	        	}
	    		break;
	    		
	    	default: //Listar el mes seleccionado
	    		mesRetorno=retorno-1;
	    		break;
    	}    	    	
    	return mesRetorno;
    }
    
    
    /**
     * Devuelve el texto del mes seleccionado en las preferencias
     * @param dosLineas
     * @return
     */
    public String getPreferenciasMesTexto(int longitud,boolean dosLineas)
    {
        String textoMes="";
        int mesListado=getPreferenciasMes();
        if (mesListado>0) 
        {
        	String meses[] = contexto.getResources().getStringArray(R.array.listaMeses);
        	textoMes=meses[mesListado+1];
        	textoMes=FunGlobales.periodo(meses, mesListado+1, getPreferenciasInicioMes(),dosLineas);
        }
        if (longitud>0&&!dosLineas)
        	textoMes=textoMes.substring(0, longitud);
        return textoMes;
    }
    
    /**
     * Devuelve true o false si el mes seleccionado es Actual.
     * @return
     */
    public boolean getPreferenciasMesActual()
    {
    	String mes= PreferenceManager.getDefaultSharedPreferences(contexto).getString("listMes", "1");
    	int retorno=Integer.parseInt(mes);
    	return (retorno==1);
    }
    
    public double getPreferenciasTarifaSMS(){
    	//Retorna el valor de tarifa del SMS, que es uno de los parametrios de ajustes.
    	iva=getPreferenciasImpuestos();
    	String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("txtTarifaSMS", "8");
    	double tarifa=9; //Valor por defecto
    	try 
    	{
    		tarifa=Double.parseDouble(valor);	
    	}
    	catch(Exception e)
    	{
    		tarifa=9; //Valor en caso de una excepción (null, puntuación, ...)    		
    	}
    	tarifa=tarifa/100; //Ya lo tengo pasado a euros
    	//if (getcosteConIVA())
    	//	tarifa=tarifa*iva; //Con IVA
    	return  tarifa;
    }
    
    public int getPreferenciasSMSGratuitos(){
    	String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("txtSMSGratis", "0");
    	int numeroSMS=0;
    	try
    	{
    		numeroSMS=Integer.parseInt(valor);
    	}
    	catch (Exception e) {
			numeroSMS=0;
		}
    	return numeroSMS;
    }
    
    public double getPreferenciasEstLlamadas(int listaNumero){
    	//Retorna el valor de la tarifa del establecimento de la llamada, en los parámetros de ajustes
    	iva=getPreferenciasImpuestos();
    	String valor="";
    	switch(listaNumero)
    	{
    		case NUM:
    			valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("txtTarifaEstLlamada", "15");
    			break;
    		case NUMESP1:
    			valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("txtTarifaEsp1EstLlamada", "15");
    			break;
    		case NUMESP2:
    			valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("txtTarifaEsp2EstLlamada", "15");
    			break;
    	}
    	
    	double tarifa=15; //Valor por defecto
    	try 
    	{
    		tarifa=Double.parseDouble(valor);	
    	}
    	catch(Exception e)
    	{
    		tarifa=15; //Valor en caso de una excepción (null, puntuación, ...)    		
    	}
    	tarifa=tarifa/100; //Pasado a euros
    	tarifa=tarifa*iva; //Con IVA
    	return tarifa;
    }
    
    /**
     * Retorna si hay que mostrar el establecimiento de llamada en el listado de llamadas o no
     * @return boolean
     */
    public boolean getEstablecimiento(){
    	boolean valor=PreferenceManager.getDefaultSharedPreferences(contexto).getBoolean("chbox_establecimiento", false);
    	return valor;
    }
    
    /**
     * Retorna si hay que mostrar el IVA en el coste de las llamadas
     * @return
     */
    public boolean getcosteConIVA(){
    	boolean valor=PreferenceManager.getDefaultSharedPreferences(contexto).getBoolean("chbox_presentarIVA", true);
    	return valor;
    }
    
    
    
    /**
     * Retorna si hay que mostrar los nombres de contacto conrrespondiente a cada número
     * @return
     */
    public boolean getNombreAgenda(){
    	boolean valor=PreferenceManager.getDefaultSharedPreferences(contexto).getBoolean("chbox_nombreAgenda", true);
    	return valor;
    }
    
    /**
     * Retorna si hay que mostrar el resumen del total de tiempo hablado por cada día
     * @return
     */
    public boolean getResumenDia(){
    	boolean valor=PreferenceManager.getDefaultSharedPreferences(contexto).getBoolean("chbox_resumenDia", true);
    	return valor;
    }
    
    
    
    /**
     * Retorna el valor de Duración modificada, un parámetro de ajuste.
     * @return
     */
    public int getPreferenciasDuracion(){
    	   	
    	String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("txtDuracion", "0");
    	int duracion=0; //Valor por defecto
    	try
    	{
    		duracion=Integer.parseInt(valor);
    	}
    	catch(Exception e)
    	{
    		duracion=0; //Valor en caso de una excepción.
    	}
    	return duracion; 
    }
    
    public Drawable getPreferenciasColor(int listaNumero){

    	
    	int color=0;
    	String col="";
    	Resources r=contexto.getResources();
    	Drawable c=getColor("Transparente");
    	switch(listaNumero)
    	{
    		case NUM:
    			col= PreferenceManager.getDefaultSharedPreferences(contexto).getString("listColores", "4");
    			color=Integer.parseInt(col);
    			break;
    		case NUMESP1:
    			col= PreferenceManager.getDefaultSharedPreferences(contexto).getString("listColoresEsp1", "4");
    			color=Integer.parseInt(col);
    			break;
    		case NUMESP2:
    			col= PreferenceManager.getDefaultSharedPreferences(contexto).getString("listColoresEsp2", "4");
    			color=Integer.parseInt(col);
    			break;
    	}
    	//System.out.println("El color de ("+listaNumero+") es: "+col);
    	switch (color)
    	{
    		case 0: c=getColor("Transparente");break;
    		case 1: c=getColor("Amarillo");break;
    		case 2: c=getColor("Azul");break;
    		case 3: c=getColor("Naranja");break;
    		case 4: c=getColor("Rojo");break;
    		case 5: c=getColor("Verde");break;
    		case 6: c=getColor("Violeta");break;
    		case 7: c=getColor("Blanco");break;
    	}
    	return c;
    }
    
    /**
     * Retorna el valor de Duración, un parámetro de ajuste.
     * @return
     */
    public int getPreferenciasInicioMes(){
    	
    	String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("txtInicioMes", "1");
    	int duracion=1; //Valor por defecto
    	try
    	{
    		duracion=Integer.parseInt(valor);
    	}
    	catch(Exception e)
    	{
    		duracion=1; //Valor en caso de una excepción.
    	}
    	return duracion; 
    }
    
    /**
     * Retorna el valor de la preferencia defecto = Tarifa por defecto aplicada.
     * @return
     */
    public String getPreferenciasDefecto(){
    	//String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("defecto", "");
    	String valor="";
    	return valor;
    }
    
    /**
     * Retorna el valor del impuesto /100 y +1. Esta es la forma adecuada para calcular el valor de un importa, incluido el iva. 
     * @return
     */
    public double getPreferenciasImpuestos(){
    	String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("txtImpuestos", "18");
  		double retorno=18.0;
    	try
    	{
    		retorno=Double.parseDouble(valor);
    	}

  	    catch (Exception e) {
  		// TODO: handle exception
  		Log.d(TAG,"getPreferenciasImpuestos: Error al parsear un double");
  	    }
    	retorno=(retorno/100)+1;    	
    	return retorno;
    }
    
    /**
     * Devuelve el valor del impuesto en %
     * @return
     */
    public int getPreferenciasImpuestosPorCiento(){
    	String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("txtImpuestos", "18");
    	int retorno=Integer.parseInt(valor);	
    	return retorno;
    } 
   
    /**
     * 
     * @param color
     * @return
     */
  public Drawable getColor(String color){

	  	Resources r=contexto.getResources();
	  	Drawable c=null;
	  	Bitmap linea=null;
	  	
	  	
	  	c=r.getDrawable(R.drawable.rec_rojo);
	  	ShapeDrawable sd2 = new ShapeDrawable(new RectShape());
	  	if (color.equals("Blanco"))  sd2.getPaint().setColor(0xFFFFFFFF);
	  	if (color.equals("Amarillo"))  sd2.getPaint().setColor(0xFFFFFF00);
	  	if (color.equals("Azul"))  sd2.getPaint().setColor(0xFF0000FF);
	  	if (color.equals("Naranja"))  sd2.getPaint().setColor(0xFFFF8000);
	  	if (color.equals("Rojo"))  sd2.getPaint().setColor(0xFFFF0000);
	  	if (color.equals("Verde"))  sd2.getPaint().setColor(0xFF00FF00);
	  	if (color.equals("Violeta"))  sd2.getPaint().setColor(0xFFFF00FF);
	  	if (color.equals("Transparente"))  sd2.getPaint().setColor(0x00000000);	
	  	
	  	c=sd2;
	  	
	  	if (c instanceof BitmapDrawable) 
	  	{
	  		linea=((BitmapDrawable) c).getBitmap();
	    }
	  	else
	  	{
	  		//Creando la imagen para la línea de color
	  		Bitmap bitmap2 = Bitmap.createBitmap(contexto.getResources().getInteger(R.integer.width_linea), contexto.getResources().getInteger(R.integer.heigth_linea), Config.ARGB_8888);
	  	    Canvas canvas2 = new Canvas(bitmap2); 
	  	    c.setBounds(0, 0, canvas2.getWidth(), canvas2.getHeight());
	  	    c.draw(canvas2);
	  	    linea=bitmap2;
	  	    
	  	    //Creando la imagen completa
	  		Bitmap bitmap3 = Bitmap.createBitmap(contexto.getResources().getInteger(R.integer.width_imagen), contexto.getResources().getInteger(R.integer.heigth_imagen), Config.ARGB_8888);
	  	    Canvas canvas3 = new Canvas(bitmap3); 
	  	    canvas3.drawBitmap(linea, 0f, 0f, null);
	  	    
	  	    linea=bitmap3;
	  	    
	  	}

//	  	if (color.equals("Blanco"))  c=r.getDrawable(R.drawable.line7);
//	  	if (color.equals("Amarillo"))  c=r.getDrawable(R.drawable.line1);
//	  	if (color.equals("Azul"))  c=r.getDrawable(R.drawable.line2);
//	  	if (color.equals("Naranja"))  c=r.getDrawable(R.drawable.line3);
//	  	if (color.equals("Rojo"))  c=r.getDrawable(R.drawable.line4);
//	  	if (color.equals("Verde"))  c=r.getDrawable(R.drawable.line5);
//	  	if (color.equals("Violeta"))  c=r.getDrawable(R.drawable.line6);
//	  	if (color.equals("Transparente"))  c=r.getDrawable(R.drawable.line0);
//	  		  	
//	  	if (color.equals("Blanco"))  linea=BitmapFactory.decodeResource(r, R.drawable.line7).copy(Config.ARGB_8888, true);
//	  	if (color.equals("Amarillo"))  linea=BitmapFactory.decodeResource(r, R.drawable.line1).copy(Config.ARGB_8888, true);
//	  	if (color.equals("Azul"))  linea=BitmapFactory.decodeResource(r, R.drawable.line2).copy(Config.ARGB_8888, true);
//	  	if (color.equals("Naranja"))  linea=BitmapFactory.decodeResource(r, R.drawable.line3).copy(Config.ARGB_8888, true);
//	  	if (color.equals("Rojo"))  linea=BitmapFactory.decodeResource(r, R.drawable.line4).copy(Config.ARGB_8888, true);
//	  	if (color.equals("Verde"))  linea=BitmapFactory.decodeResource(r, R.drawable.line5).copy(Config.ARGB_8888, true);
//	  	if (color.equals("Violeta"))  linea=BitmapFactory.decodeResource(r, R.drawable.line6).copy(Config.ARGB_8888, true);
//	  	if (color.equals("Transparente"))  linea=BitmapFactory.decodeResource(r, R.drawable.line0).copy(Config.ARGB_8888, true);
	  	
	  	BitmapDrawable bpd=null;
	  	try
	  	{
	  		bpd=new BitmapDrawable(linea);
	  	
	  	}
	  	catch (Exception e) {
			// TODO: handle exception
	  		Log.d(TAG,"Excepcion en getColorDanger - "+e.getMessage());
		}
	  	c=bpd.mutate().getCurrent();
    	return c;
    }
  
  /**
   * 
   * @param color
   * @param icon
   * @param altoPantalla
   * @return
   */
  public Drawable getColorIcon(String color,String icon,int altoPantalla){

	  	Resources r=contexto.getResources();
	  	Drawable c=null;
	  	Bitmap linea=null;
	  	Bitmap icono=null;
	  	//Shape Drawable
	  	
//	  	c=r.getDrawable(R.drawable.rec_rojo);
	  	ShapeDrawable sd2 = new ShapeDrawable(new RectShape());
	  	if (color.equals("Blanco"))  sd2.getPaint().setColor(0xFFFFFFFF);
	  	if (color.equals("Amarillo"))  sd2.getPaint().setColor(0xFFFFFF00);
	  	if (color.equals("Azul"))  sd2.getPaint().setColor(0xFF0000FF);
	  	if (color.equals("Naranja"))  sd2.getPaint().setColor(0xFFFF8000);
	  	if (color.equals("Rojo"))  sd2.getPaint().setColor(0xFFFF0000);
	  	if (color.equals("Verde"))  sd2.getPaint().setColor(0xFF00FF00);
	  	if (color.equals("Violeta"))  sd2.getPaint().setColor(0xFFFF00FF);
	  	if (color.equals("Transparente"))  sd2.getPaint().setColor(0x00000000);	
	  	
	  	c=sd2;
	  	
	  	if (c instanceof BitmapDrawable) 
	  	{
	  		linea=((BitmapDrawable) c).getBitmap();
	    }
	  	else
	  	{
	  		//Creando la imagen para la línea de color
	  		
	  		Bitmap bitmap2 = Bitmap.createBitmap(contexto.getResources().getInteger(R.integer.width_linea), contexto.getResources().getInteger(R.integer.heigth_linea), Config.ARGB_8888);
	  	    Canvas canvas2 = new Canvas(bitmap2); 
	  	    c.setBounds(0, 0, canvas2.getWidth(), canvas2.getHeight());
	  	    c.draw(canvas2);
	  	    linea=bitmap2;
	  	    
	  	    //Creando la imagen completa
	  		Bitmap bitmap3 = Bitmap.createBitmap(contexto.getResources().getInteger(R.integer.width_imagen), contexto.getResources().getInteger(R.integer.heigth_imagen), Config.ARGB_8888);
	  	    Canvas canvas3 = new Canvas(bitmap3); 
	  	    canvas3.drawBitmap(linea, 0f, 0f, null);
	  	    
	  	    linea=bitmap3;
	  	    
	  	}
	  	
	  	if (icon.equals("relog_mas")) icono=BitmapFactory.decodeResource(r, R.drawable.relog_mas).copy(Config.ARGB_8888, true);
	  	if (icon.equals("relog_peligro")) icono=BitmapFactory.decodeResource(r, R.drawable.relog_peligro).copy(Config.ARGB_8888, true);
	  	
//	  	if (icon.equals("relog_mas")) icono=((BitmapDrawable) contexto.getResources().getDrawable(android.R.drawable.stat_notify_more)).getBitmap();
//	  	if (icon.equals("relog_peligro")) icono=((BitmapDrawable) contexto.getResources().getDrawable(android.R.drawable.stat_notify_error)).getBitmap();
	  	
	  	
	  	Canvas canvas=new Canvas(linea);
	  	canvas.drawBitmap(icono, 0f, (float)(contexto.getResources().getInteger(R.integer.heigth_imagen)/4), null);
	  	canvas.scale(0.5f, 0.5f);
	  	
	  	BitmapDrawable bpd=null;
	  	try
	  	{
	  		bpd=new BitmapDrawable(linea);
	  	
	  	}
	  	catch (Exception e) {
			// TODO: handle exception
	  		Log.d(TAG,"Excepcion en getColorDanger - "+e.getMessage());
		}
	c=bpd.mutate().getCurrent();
  	return c;
  }
  
  
  
  /**
   * Devuelve el valor del ajuste de descuento.
   * @return
   */
  public int getPreferenciasDescuento(){
	  String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("txtDescuento", "0");
	  int retorno=0;
	  try
	  {
	  retorno=Integer.parseInt(valor);
	  }
	  catch (Exception e) {
		// TODO: handle exception
		  retorno=0;
		  Log.d(TAG,"getPreferenciasDescuento: Error al parsear un entero");
	  }
	  return retorno;
  }
  
  /**
   * Devuelve el valor de la cuota mensual del ajuste
   * @return
   */
  public double getCuotaMensual(){
	 String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("txtCuota","0");
	 Double retorno=0.0;
	 try
	 {
		 retorno=Double.parseDouble(valor);
	 }
	 catch (Exception e)
	 {
		 retorno=0.0;
		 Log.d(TAG,"getCuotaMensual: Error al parsear un double");
	 }
	 return retorno;
  }
  
  /**
   * Devuelve el valor del coste de la tarifa plana
   * @return
   */
  public double getTarifaPlana(){
	 String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("txtTarifaPlana","0");
	 Double retorno=0.0;
	 try
	 {
		 retorno=Double.parseDouble(valor);
	 }
	 catch (Exception e)
	 {
		 retorno=0.0;
		 Log.d(TAG,"getTarifaPlana: Error al parsear un double");
	 }
	 return retorno;
  } 
  
  /**
   * Devuelva el numero de decimales que se deben mostrar en los cálculos introducido en ajustes
   * @return
   */
  public int getPreferenciasDecimales(){
	  String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("txtDecimales", "2");
	  int retorno=2;
	  try
	  {
	  retorno=Integer.parseInt(valor);
	  if (retorno>4) retorno=4;
	  if (retorno<2) retorno=2;
	  }
	  catch (Exception e) {
		// TODO: handle exception
		  retorno=2;
		  Log.d(TAG,"getPreferenciasDecimales: Error al parsear un entero");
	  }
	  return retorno;
  }
  
  
  
  /**
   * Devuelve el gasto minimo que se ha editado en los ajustes.
   * @return
   */
  public double getGastoMinimo(){
	  String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("txtGastoMinimo", "0");
	  Double retorno=0.0;
		 try
		 {
			 retorno=Double.parseDouble(valor);
		 }
		 catch (Exception e)
		 {
			 retorno=0.0;
			 Log.d(TAG,"getGastoMinimo: Error al parsear un double");
		 }
		 return retorno;
  }
  
  /**
   * Devuelve el operador seleccionado por el usuario
   * @return
   * String Operadora
   */
  public String getOperadora()
  {
	  String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("listOperadora", "SinOperadora");
	  return valor;
  }
  
  /**
   * Devuelve el comportamiento seleccionado para el widget
   * @return
   * boolean true=llamadas false=arranca gastos móvil
   */
  public boolean getComportamientoWidget()
  {
	  boolean valor=PreferenceManager.getDefaultSharedPreferences(contexto).getBoolean("chbox_comportamientoWidget", false);
	  return valor;
  }
  
  
  /**
   * Devuelve la manera en como debe arrancar la aplicación
   * @return
   * boolean true=llamadas false=arranca gastos móvil
   */
  public boolean getArrancarAplicacion()
  {
	  boolean valor=PreferenceManager.getDefaultSharedPreferences(contexto).getBoolean("chbox_arranqueAplicacion", false);
	  return valor;
  }
  
  /**
   * Guarda preferencias con el par clave,valor. Donde valor es un string
   * @param key
   * @param value
   */
  public void guardarPreferences(String key, String value)
  {
	    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(contexto);
	    SharedPreferences.Editor editor = sharedPreferences.edit();
	    editor.putString(key, value);
	    editor.commit();
	   }

  /**
   * Guarda preferencias con el par clave,valor. Donde valor es un integer
   * @param key
   * @param value
   */
	public void guardarPreferences(String key, int value)
	{
	    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(contexto);
	    SharedPreferences.Editor editor = sharedPreferences.edit();
	    editor.putInt(key, value);
	    editor.commit();
	   }
	
	
	
    /**
     * Recupera el valor de la preferencia de tipo int, relacionado con la clave key. Si no existe
     * la clave devuelve -9999
     * @param key
     * @return int
     */
	public int recuperarPreferencesInt(String key) {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(contexto);
        int retorno = prefs.getInt(key, -9999);
        if (retorno != -9999) {
            return retorno;
        } else {
            return -9999;
        }
    }
	
    /**
     * Recupera el valor de la preferencia de tipo string, relacionado con la clave key. Si no existe
     * la clave devuelve null
     * @param key
     * @return String
     */
	public String recuperarPreferencesString(String key) {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(contexto);
        String retorno = prefs.getString(key, null);
        if (retorno != null) {
            return retorno;
        } else {
            return null;
        }
    }
	
	
	/**
	 * Devuelve el primer mes y el último en el que hay llamadas en el registro de llamadas del teléfono
	 * @return int[] con los meses del primer y el último [0] el primero y [1] el segundo
	 */
    
    public int[] primerUltimoMesConLlamadas()
    {
    	int retorno[]={0,0};
    	Cursor c; //Cursor con el que recorreremos la base de datos de registros de llamadas
    	
    	c=contexto.getContentResolver().query(CallLog.Calls.CONTENT_URI,null, CallLog.Calls.TYPE+"="+CallLog.Calls.OUTGOING_TYPE , null, "date ASC");
    	int iFecha = c.getColumnIndex(CallLog.Calls.DATE);
    	
    	c.moveToFirst();
    	long fechaPrimera=c.getLong(iFecha);
    	c.moveToLast();
    	long fechaUltima=c.getLong(iFecha);
    	c.close();
    	
    	String primerMes=DateFormat.format("MM",new Date(fechaPrimera)).toString();
    	String segundoMes=DateFormat.format("MM",new Date(fechaUltima)).toString();
    	
    	retorno[0]=Integer.parseInt(primerMes);
    	retorno[1]=Integer.parseInt(segundoMes);

    	return retorno;
    }
    
    /**
     * Devuelve una cadena con los dias festivos separados por coma.
     * @return
     * String Dias festivos, separados por coma.
     */
    public String getDiasFestivos()
    {
  	  String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("txtDiasFestivos", contexto.getString(R.string.festivos));
  	  return valor;
    }
    
    public void incluirFestivo(String fecha)
    {
    	String nuevosDiasFestivos=getDiasFestivos();
    	nuevosDiasFestivos+=";"+fecha;
    	guardarPreferences("txtDiasFestivos", nuevosDiasFestivos);
    }
    
    public boolean esFestivo(String fecha)
    {
    	String festivos=getDiasFestivos();
    	if (festivos.contains(fecha))
        {
        	
        	return true;
        }
        
    	return false;
    }
    
    public void eliminarFestivo(String fecha)
    {
    	String festivos=getDiasFestivos();
    	if (esFestivo(fecha))
    	{
    		//Eliminamos la fecha
    		int indice=festivos.indexOf(fecha);
    		String nuevosDiasFestivos=festivos.substring(0, indice-1)+festivos.substring(indice+10);
    		guardarPreferences("txtDiasFestivos", nuevosDiasFestivos);
    	}
    }
    
    
    /**
     * Devuelve si la alarma de tiempo esta activada o no
     * @return boolean
     */
    public boolean getPreferenciasActivaAlarmaTiempo()
    {
  	  boolean valor=PreferenceManager.getDefaultSharedPreferences(contexto).getBoolean("chbox_alarmaTiempo", false);
  	  return valor;
    }
    

    
    /**
     * Devuelve si la alarma de Coste esta activada o no
     * @return boolean
     */
    public boolean getPreferenciasActivaAlarmaCoste()
    {
  	  boolean valor=PreferenceManager.getDefaultSharedPreferences(contexto).getBoolean("chbox_alarmaCoste", false);
  	  return valor;
    }    
    
    /**
     * Devuelve el valor, en minutos, de la alarma de tiempo. Este valor corresponde con los minutos que hay que contar antes de que
     * se llegue al limite de minutos mensuales, para que salte la alarma.
     * @return integer
     */
    public int getPreferenciasValorAlarmaTiempo()
    {
    	int valor=0;
    	try
    	{
    		valor=Integer.parseInt(PreferenceManager.getDefaultSharedPreferences(contexto).getString("txt_valorAlarmaTiempo", "0"));
    	}
    	catch (Exception e)
    	{
    		valor=0;
    	}
    	
    	return valor;
    }
    
    /**
     * Devuelve el valor, en minutos, de la alarma de tiempo. Este valor corresponde con los minutos que hay que contar antes de que
     * se llegue al limite de minutos mensuales, para que salte la alarma.
     * @return integer
     */
    public int getPreferenciasValorAlarmaCoste()
    {
    	int valor=0;
    	try
    	{
    		valor=Integer.parseInt(PreferenceManager.getDefaultSharedPreferences(contexto).getString("txt_valorAlarmaCoste", "0"));
    	}
    	catch (Exception e)
    	{
    		valor=10000;
    	}
    	
    	return valor;
    }
    
    /**
     * Devuelve el Ringtone seleccionado en preferencias.
     * @return
     */
    public String getPreferenciasRingtonePreference()
    {
    	String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("ringtonePref", "DEFAULT_SOUND");
    	return valor;
    	
    }
    
    
    /**
     * Devuelve si se ha configurado una notifiación o una por llamada en alarma de tiempo
     * @return boolean
     * true: Una notificación
     * false: Por cada llamada
     */
    public boolean getPreferenciasUnaNotificacionTiempo()
    {
    	String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("numNotificacionesTiempo", "1");
    	if (valor.equals("1"))
    		return true;
    	return false;
    }

    
    /**
     * Devuelve si se ha configurado una notifiación o una por llamada en alarma de coste
     * @return boolean
     * true: Una notificación
     * false: Por cada llamada
     */
    public boolean getPreferenciasUnaNotificacionCoste()
    {
    	String valor=PreferenceManager.getDefaultSharedPreferences(contexto).getString("numNotificacionesCoste", "1");
    	if (valor.equals("1"))
    		return true;
    	return false;
    }
    
    
    /**
     * Devuelve si hay permanencia 
     * @return boolean
     */
    public boolean getPreferenciasHayPermanencia()
    {
  	  boolean valor=PreferenceManager.getDefaultSharedPreferences(contexto).getBoolean("chbox_permanencia", false);
  	  return valor;
    }
    
    
    /**
     * Devuelve si hay alarma de permanencia activada
     * @return boolean
     */
    public boolean getPreferenciasActivaAlarmaPermanencia()
    {
  	  boolean valor=PreferenceManager.getDefaultSharedPreferences(contexto).getBoolean("chbox_alarmaPermanencia", false);
  	  return valor;
    }
    
    
    /**
     * Devuelve la fecha de fin de permanencia
     * @return boolean
     */
    public Date getPreferenciasFechaFinPermanencia()
    {
  	  Calendar valor=DatePreference.getDateFor(PreferenceManager.getDefaultSharedPreferences(contexto),"dt_permanencia");
  	  Date d=valor.getTime();
  	  return d;
    } 
}
